home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1999 April: Mac OS SDK / Dev.CD Apr 99 SDK1.toast / Development Kits / Interfaces&Libraries / Universal / Interfaces / CIncludes / AEObjects.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-08-17  |  13.0 KB  |  282 lines  |  [TEXT/MPS ]

  1. /*
  2.      File:        AEObjects.h
  3.  
  4.      Contains:    Object Support Library Interfaces.
  5.  
  6.      Version:    Technology:    System 7.5
  7.                  Release:    Universal Interfaces 3.2
  8.  
  9.      Copyright:    © 1991-1998 by Apple Computer, Inc., all rights reserved
  10.  
  11.      Bugs?:        For bug reports, consult the following page on
  12.                  the World Wide Web:
  13.  
  14.                      http://developer.apple.com/bugreporter/
  15.  
  16. */
  17. #ifndef __AEOBJECTS__
  18. #define __AEOBJECTS__
  19.  
  20. #ifndef __OSUTILS__
  21. #include <OSUtils.h>
  22. #endif
  23. #ifndef __APPLEEVENTS__
  24. #include <AppleEvents.h>
  25. #endif
  26. #ifndef __ERRORS__
  27. #include <Errors.h>
  28. #endif
  29. #ifndef __EVENTS__
  30. #include <Events.h>
  31. #endif
  32.  
  33.  
  34.  
  35. #if PRAGMA_ONCE
  36. #pragma once
  37. #endif
  38.  
  39. #ifdef __cplusplus
  40. extern "C" {
  41. #endif
  42.  
  43. #if PRAGMA_IMPORT
  44. #pragma import on
  45. #endif
  46.  
  47. #if PRAGMA_STRUCT_ALIGN
  48.     #pragma options align=mac68k
  49. #elif PRAGMA_STRUCT_PACKPUSH
  50.     #pragma pack(push, 2)
  51. #elif PRAGMA_STRUCT_PACK
  52.     #pragma pack(2)
  53. #endif
  54.  
  55.  
  56. enum {
  57.                                                                 /****    LOGICAL OPERATOR CONSTANTS    ****/
  58.     kAEAND                        = FOUR_CHAR_CODE('AND '),        /*  0x414e4420  */
  59.     kAEOR                        = FOUR_CHAR_CODE('OR  '),        /*  0x4f522020  */
  60.     kAENOT                        = FOUR_CHAR_CODE('NOT '),        /*  0x4e4f5420  */
  61.                                                                 /****    ABSOLUTE ORDINAL CONSTANTS    ****/
  62.     kAEFirst                    = FOUR_CHAR_CODE('firs'),        /*  0x66697273  */
  63.     kAELast                        = FOUR_CHAR_CODE('last'),        /*  0x6c617374  */
  64.     kAEMiddle                    = FOUR_CHAR_CODE('midd'),        /*  0x6d696464  */
  65.     kAEAny                        = FOUR_CHAR_CODE('any '),        /*  0x616e7920  */
  66.     kAEAll                        = FOUR_CHAR_CODE('all '),        /*  0x616c6c20  */
  67.                                                                 /****    RELATIVE ORDINAL CONSTANTS    ****/
  68.     kAENext                        = FOUR_CHAR_CODE('next'),        /*  0x6e657874  */
  69.     kAEPrevious                    = FOUR_CHAR_CODE('prev'),        /*  0x70726576  */
  70.                                                                 /****    KEYWORD CONSTANT     ****/
  71.     keyAECompOperator            = FOUR_CHAR_CODE('relo'),        /*  0x72656c6f  */
  72.     keyAELogicalTerms            = FOUR_CHAR_CODE('term'),        /*  0x7465726d  */
  73.     keyAELogicalOperator        = FOUR_CHAR_CODE('logc'),        /*  0x6c6f6763  */
  74.     keyAEObject1                = FOUR_CHAR_CODE('obj1'),        /*  0x6f626a31  */
  75.     keyAEObject2                = FOUR_CHAR_CODE('obj2'),        /*  0x6f626a32  */
  76.                                                                 /*    ... for Keywords for getting fields out of object specifier records. */
  77.     keyAEDesiredClass            = FOUR_CHAR_CODE('want'),        /*  0x77616e74  */
  78.     keyAEContainer                = FOUR_CHAR_CODE('from'),        /*  0x66726f6d  */
  79.     keyAEKeyForm                = FOUR_CHAR_CODE('form'),        /*  0x666f726d  */
  80.     keyAEKeyData                = FOUR_CHAR_CODE('seld')        /*  0x73656c64  */
  81. };
  82.  
  83.  
  84. enum {
  85.                                                                 /*    ... for Keywords for getting fields out of Range specifier records. */
  86.     keyAERangeStart                = FOUR_CHAR_CODE('star'),        /*  0x73746172  */
  87.     keyAERangeStop                = FOUR_CHAR_CODE('stop'),        /*  0x73746f70  */
  88.                                                                 /*    ... special handler selectors for OSL Callbacks. */
  89.     keyDisposeTokenProc            = FOUR_CHAR_CODE('xtok'),        /*  0x78746f6b  */
  90.     keyAECompareProc            = FOUR_CHAR_CODE('cmpr'),        /*  0x636d7072  */
  91.     keyAECountProc                = FOUR_CHAR_CODE('cont'),        /*  0x636f6e74  */
  92.     keyAEMarkTokenProc            = FOUR_CHAR_CODE('mkid'),        /*  0x6d6b6964  */
  93.     keyAEMarkProc                = FOUR_CHAR_CODE('mark'),        /*  0x6d61726b  */
  94.     keyAEAdjustMarksProc        = FOUR_CHAR_CODE('adjm'),        /*  0x61646a6d  */
  95.     keyAEGetErrDescProc            = FOUR_CHAR_CODE('indc')        /*  0x696e6463  */
  96. };
  97.  
  98. /****    VALUE and TYPE CONSTANTS    ****/
  99.  
  100. enum {
  101.                                                                 /*    ... possible values for the keyAEKeyForm field of an object specifier. */
  102.     formAbsolutePosition        = FOUR_CHAR_CODE('indx'),        /*  0x696e6478  */
  103.     formRelativePosition        = FOUR_CHAR_CODE('rele'),        /*  0x72656c65  */
  104.     formTest                    = FOUR_CHAR_CODE('test'),        /*  0x74657374  */
  105.     formRange                    = FOUR_CHAR_CODE('rang'),        /*  0x72616e67  */
  106.     formPropertyID                = FOUR_CHAR_CODE('prop'),        /*  0x70726f70  */
  107.     formName                    = FOUR_CHAR_CODE('name'),        /*  0x6e616d65  */
  108.                                                                 /*    ... relevant types (some of these are often pared with forms above). */
  109.     typeObjectSpecifier            = FOUR_CHAR_CODE('obj '),        /*  0x6f626a20  */
  110.     typeObjectBeingExamined        = FOUR_CHAR_CODE('exmn'),        /*  0x65786d6e  */
  111.     typeCurrentContainer        = FOUR_CHAR_CODE('ccnt'),        /*  0x63636e74  */
  112.     typeToken                    = FOUR_CHAR_CODE('toke'),        /*  0x746f6b65  */
  113.     typeRelativeDescriptor        = FOUR_CHAR_CODE('rel '),        /*  0x72656c20  */
  114.     typeAbsoluteOrdinal            = FOUR_CHAR_CODE('abso'),        /*  0x6162736f  */
  115.     typeIndexDescriptor            = FOUR_CHAR_CODE('inde'),        /*  0x696e6465  */
  116.     typeRangeDescriptor            = FOUR_CHAR_CODE('rang'),        /*  0x72616e67  */
  117.     typeLogicalDescriptor        = FOUR_CHAR_CODE('logi'),        /*  0x6c6f6769  */
  118.     typeCompDescriptor            = FOUR_CHAR_CODE('cmpd'),        /*  0x636d7064  */
  119.     typeOSLTokenList            = FOUR_CHAR_CODE('ostl')        /*  0x6F73746C  */
  120. };
  121.  
  122. /* Possible values for flags parameter to AEResolve.  They're additive */
  123.  
  124. enum {
  125.     kAEIDoMinimum                = 0x0000,
  126.     kAEIDoWhose                    = 0x0001,
  127.     kAEIDoMarking                = 0x0004,
  128.     kAEPassSubDescs                = 0x0008,
  129.     kAEResolveNestedLists        = 0x0010,
  130.     kAEHandleSimpleRanges        = 0x0020,
  131.     kAEUseRelativeIterators        = 0x0040
  132. };
  133.  
  134. /**** SPECIAL CONSTANTS FOR CUSTOM WHOSE-CLAUSE RESOLUTION */
  135.  
  136. enum {
  137.     typeWhoseDescriptor            = FOUR_CHAR_CODE('whos'),        /*  0x77686f73  */
  138.     formWhose                    = FOUR_CHAR_CODE('whos'),        /*  0x77686f73  */
  139.     typeWhoseRange                = FOUR_CHAR_CODE('wrng'),        /*  0x77726e67  */
  140.     keyAEWhoseRangeStart        = FOUR_CHAR_CODE('wstr'),        /*  0x77737472  */
  141.     keyAEWhoseRangeStop            = FOUR_CHAR_CODE('wstp'),        /*  0x77737470  */
  142.     keyAEIndex                    = FOUR_CHAR_CODE('kidx'),        /*  0x6b696478  */
  143.     keyAETest                    = FOUR_CHAR_CODE('ktst')        /*  0x6b747374  */
  144. };
  145.  
  146. /*
  147.     used for rewriting tokens in place of 'ccnt' descriptors
  148.     This record is only of interest to those who, when they...
  149.     ...get ranges as key data in their accessor procs, choose
  150.     ...to resolve them manually rather than call AEResolve again.
  151. */
  152.  
  153. struct ccntTokenRecord {
  154.     DescType                         tokenClass;
  155.     AEDesc                             token;
  156. };
  157. typedef struct ccntTokenRecord            ccntTokenRecord;
  158.  
  159. typedef ccntTokenRecord *                ccntTokenRecPtr;
  160. typedef ccntTokenRecPtr *                ccntTokenRecHandle;
  161. #if OLDROUTINENAMES
  162. typedef AEDesc *                        DescPtr;
  163. typedef DescPtr *                        DescHandle;
  164. #endif  /* OLDROUTINENAMES */
  165.  
  166. /* typedefs providing type checking for procedure pointers */
  167. typedef CALLBACK_API( OSErr , OSLAccessorProcPtr )(DescType desiredClass, const AEDesc *container, DescType containerClass, DescType form, const AEDesc *selectionData, AEDesc *value, long accessorRefcon);
  168. typedef CALLBACK_API( OSErr , OSLCompareProcPtr )(DescType oper, const AEDesc *obj1, const AEDesc *obj2, Boolean *result);
  169. typedef CALLBACK_API( OSErr , OSLCountProcPtr )(DescType desiredType, DescType containerClass, const AEDesc *container, long *result);
  170. typedef CALLBACK_API( OSErr , OSLDisposeTokenProcPtr )(AEDesc *unneededToken);
  171. typedef CALLBACK_API( OSErr , OSLGetMarkTokenProcPtr )(const AEDesc *dContainerToken, DescType containerClass, AEDesc *result);
  172. typedef CALLBACK_API( OSErr , OSLGetErrDescProcPtr )(AEDesc **appDescPtr);
  173. typedef CALLBACK_API( OSErr , OSLMarkProcPtr )(const AEDesc *dToken, const AEDesc *markToken, long index);
  174. typedef CALLBACK_API( OSErr , OSLAdjustMarksProcPtr )(long newStart, long newStop, const AEDesc *markToken);
  175. typedef STACK_UPP_TYPE(OSLAccessorProcPtr)                         OSLAccessorUPP;
  176. typedef STACK_UPP_TYPE(OSLCompareProcPtr)                         OSLCompareUPP;
  177. typedef STACK_UPP_TYPE(OSLCountProcPtr)                         OSLCountUPP;
  178. typedef STACK_UPP_TYPE(OSLDisposeTokenProcPtr)                     OSLDisposeTokenUPP;
  179. typedef STACK_UPP_TYPE(OSLGetMarkTokenProcPtr)                     OSLGetMarkTokenUPP;
  180. typedef STACK_UPP_TYPE(OSLGetErrDescProcPtr)                     OSLGetErrDescUPP;
  181. typedef STACK_UPP_TYPE(OSLMarkProcPtr)                             OSLMarkUPP;
  182. typedef STACK_UPP_TYPE(OSLAdjustMarksProcPtr)                     OSLAdjustMarksUPP;
  183. enum { uppOSLAccessorProcInfo = 0x000FFFE0 };                     /* pascal 2_bytes Func(4_bytes, 4_bytes, 4_bytes, 4_bytes, 4_bytes, 4_bytes, 4_bytes) */
  184. enum { uppOSLCompareProcInfo = 0x00003FE0 };                     /* pascal 2_bytes Func(4_bytes, 4_bytes, 4_bytes, 4_bytes) */
  185. enum { uppOSLCountProcInfo = 0x00003FE0 };                         /* pascal 2_bytes Func(4_bytes, 4_bytes, 4_bytes, 4_bytes) */
  186. enum { uppOSLDisposeTokenProcInfo = 0x000000E0 };                 /* pascal 2_bytes Func(4_bytes) */
  187. enum { uppOSLGetMarkTokenProcInfo = 0x00000FE0 };                 /* pascal 2_bytes Func(4_bytes, 4_bytes, 4_bytes) */
  188. enum { uppOSLGetErrDescProcInfo = 0x000000E0 };                 /* pascal 2_bytes Func(4_bytes) */
  189. enum { uppOSLMarkProcInfo = 0x00000FE0 };                         /* pascal 2_bytes Func(4_bytes, 4_bytes, 4_bytes) */
  190. enum { uppOSLAdjustMarksProcInfo = 0x00000FE0 };                 /* pascal 2_bytes Func(4_bytes, 4_bytes, 4_bytes) */
  191. #define NewOSLAccessorProc(userRoutine)                         (OSLAccessorUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppOSLAccessorProcInfo, GetCurrentArchitecture())
  192. #define NewOSLCompareProc(userRoutine)                             (OSLCompareUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppOSLCompareProcInfo, GetCurrentArchitecture())
  193. #define NewOSLCountProc(userRoutine)                             (OSLCountUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppOSLCountProcInfo, GetCurrentArchitecture())
  194. #define NewOSLDisposeTokenProc(userRoutine)                     (OSLDisposeTokenUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppOSLDisposeTokenProcInfo, GetCurrentArchitecture())
  195. #define NewOSLGetMarkTokenProc(userRoutine)                     (OSLGetMarkTokenUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppOSLGetMarkTokenProcInfo, GetCurrentArchitecture())
  196. #define NewOSLGetErrDescProc(userRoutine)                         (OSLGetErrDescUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppOSLGetErrDescProcInfo, GetCurrentArchitecture())
  197. #define NewOSLMarkProc(userRoutine)                             (OSLMarkUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppOSLMarkProcInfo, GetCurrentArchitecture())
  198. #define NewOSLAdjustMarksProc(userRoutine)                         (OSLAdjustMarksUPP)NewRoutineDescriptor((ProcPtr)(userRoutine), uppOSLAdjustMarksProcInfo, GetCurrentArchitecture())
  199. #define CallOSLAccessorProc(userRoutine, desiredClass, container, containerClass, form, selectionData, value, accessorRefcon)  CALL_SEVEN_PARAMETER_UPP((userRoutine), uppOSLAccessorProcInfo, (desiredClass), (container), (containerClass), (form), (selectionData), (value), (accessorRefcon))
  200. #define CallOSLCompareProc(userRoutine, oper, obj1, obj2, result)  CALL_FOUR_PARAMETER_UPP((userRoutine), uppOSLCompareProcInfo, (oper), (obj1), (obj2), (result))
  201. #define CallOSLCountProc(userRoutine, desiredType, containerClass, container, result)  CALL_FOUR_PARAMETER_UPP((userRoutine), uppOSLCountProcInfo, (desiredType), (containerClass), (container), (result))
  202. #define CallOSLDisposeTokenProc(userRoutine, unneededToken)     CALL_ONE_PARAMETER_UPP((userRoutine), uppOSLDisposeTokenProcInfo, (unneededToken))
  203. #define CallOSLGetMarkTokenProc(userRoutine, dContainerToken, containerClass, result)  CALL_THREE_PARAMETER_UPP((userRoutine), uppOSLGetMarkTokenProcInfo, (dContainerToken), (containerClass), (result))
  204. #define CallOSLGetErrDescProc(userRoutine, appDescPtr)             CALL_ONE_PARAMETER_UPP((userRoutine), uppOSLGetErrDescProcInfo, (appDescPtr))
  205. #define CallOSLMarkProc(userRoutine, dToken, markToken, index)     CALL_THREE_PARAMETER_UPP((userRoutine), uppOSLMarkProcInfo, (dToken), (markToken), (index))
  206. #define CallOSLAdjustMarksProc(userRoutine, newStart, newStop, markToken)  CALL_THREE_PARAMETER_UPP((userRoutine), uppOSLAdjustMarksProcInfo, (newStart), (newStop), (markToken))
  207.  
  208.  
  209.  
  210. EXTERN_API( OSErr )
  211. AEObjectInit                    (void);
  212.  
  213. /* Not done by inline, but by direct linking into code.  It sets up the pack
  214.   such that further calls can be via inline */
  215. EXTERN_API( OSErr )
  216. AESetObjectCallbacks            (OSLCompareUPP             myCompareProc,
  217.                                  OSLCountUPP             myCountProc,
  218.                                  OSLDisposeTokenUPP     myDisposeTokenProc,
  219.                                  OSLGetMarkTokenUPP     myGetMarkTokenProc,
  220.                                  OSLMarkUPP             myMarkProc,
  221.                                  OSLAdjustMarksUPP         myAdjustMarksProc,
  222.                                  OSLGetErrDescUPP         myGetErrDescProcPtr)                THREEWORDINLINE(0x303C, 0x0E35, 0xA816);
  223.  
  224. EXTERN_API( OSErr )
  225. AEResolve                        (const AEDesc *            objectSpecifier,
  226.                                  short                     callbackFlags,
  227.                                  AEDesc *                theToken)                            THREEWORDINLINE(0x303C, 0x0536, 0xA816);
  228.  
  229. EXTERN_API( OSErr )
  230. AEInstallObjectAccessor            (DescType                 desiredClass,
  231.                                  DescType                 containerType,
  232.                                  OSLAccessorUPP         theAccessor,
  233.                                  long                     accessorRefcon,
  234.                                  Boolean                 isSysHandler)                        THREEWORDINLINE(0x303C, 0x0937, 0xA816);
  235.  
  236. EXTERN_API( OSErr )
  237. AERemoveObjectAccessor            (DescType                 desiredClass,
  238.                                  DescType                 containerType,
  239.                                  OSLAccessorUPP         theAccessor,
  240.                                  Boolean                 isSysHandler)                        THREEWORDINLINE(0x303C, 0x0738, 0xA816);
  241.  
  242. EXTERN_API( OSErr )
  243. AEGetObjectAccessor                (DescType                 desiredClass,
  244.                                  DescType                 containerType,
  245.                                  OSLAccessorUPP *        accessor,
  246.                                  long *                    accessorRefcon,
  247.                                  Boolean                 isSysHandler)                        THREEWORDINLINE(0x303C, 0x0939, 0xA816);
  248.  
  249. EXTERN_API( OSErr )
  250. AEDisposeToken                    (AEDesc *                theToken)                            THREEWORDINLINE(0x303C, 0x023A, 0xA816);
  251.  
  252. EXTERN_API( OSErr )
  253. AECallObjectAccessor            (DescType                 desiredClass,
  254.                                  const AEDesc *            containerToken,
  255.                                  DescType                 containerClass,
  256.                                  DescType                 keyForm,
  257.                                  const AEDesc *            keyData,
  258.                                  AEDesc *                token)                                THREEWORDINLINE(0x303C, 0x0C3B, 0xA816);
  259.  
  260.  
  261.  
  262. #if PRAGMA_STRUCT_ALIGN
  263.     #pragma options align=reset
  264. #elif PRAGMA_STRUCT_PACKPUSH
  265.     #pragma pack(pop)
  266. #elif PRAGMA_STRUCT_PACK
  267.     #pragma pack()
  268. #endif
  269.  
  270. #ifdef PRAGMA_IMPORT_OFF
  271. #pragma import off
  272. #elif PRAGMA_IMPORT
  273. #pragma import reset
  274. #endif
  275.  
  276. #ifdef __cplusplus
  277. }
  278. #endif
  279.  
  280. #endif /* __AEOBJECTS__ */
  281.  
  282.